package com.ruoyi.common.order.strategy;

import com.ruoyi.common.utils.OrderNumberUtils;

import java.util.Map;

/**
 * 模版方法
 */
public abstract class AbstractOrderNumberStrategy implements OrderNumberStrategy {

    /**
     * 侯建订单后缀
     * @param date 日期字符串
     * @param companyId 公司ID
     * @return 结果
     */
    @Override
    public String buildOrderNumberSuffix(String date, Long companyId) {
        // 构建查询参数
        Map<String, Object> params = buildParams(date, companyId);
        // 获取查询结果
        String lastNumber = queryLastOrderNumber(params);
        return formatSuffix(lastNumber);
    }

    /**
     * 构建查询参数
     * @param date 日期字符串
     * @param companyId 公司ID
     * @return 结果
     */
    protected abstract Map<String, Object> buildParams(String date, Long companyId);

    /**
     * 获取查询结果
     * @param params 查询参数
     * @return 结果
     */
    protected abstract String queryLastOrderNumber(Map<String, Object> params);

    /**
     * 计算订单号后缀逻辑
     * @param lastNumber 现有的订单号
     * @return 结果
     */
    protected String formatSuffix(String lastNumber) {
        return lastNumber == null ? "001" : OrderNumberUtils.generateOrderNumberSuffix(lastNumber);
    }
}
